home *** CD-ROM | disk | FTP | other *** search
/ The Fatted Calf / The Fatted Calf.iso / Modules / BackSpaceModules / Source / IconMosaicView / DefaultsTable.m < prev    next >
Text File  |  1993-01-27  |  4KB  |  158 lines

  1. /* File: DefaultsTable.m - NXString subclass for handling defaults
  2.  *
  3.  * By: Christopher Lane
  4.  * Symbolic Systems Resources Group
  5.  * Knowledge Systems Laboratory
  6.  * Stanford University
  7.  *
  8.  * Date:  25 January 1993
  9.  *
  10.  * Copyright: 1992 & 1993 by The Leland Stanford Junior University.
  11.  *            portions copyright 1992, 1993 by Christopher Lane
  12.  * This program may be distributed without restriction for non-commercial use.
  13.  */
  14.  
  15. #import "DefaultsTable.h"
  16.  
  17. #import <stdlib.h>
  18.  
  19. #define intDefaultFormat "%d"
  20. #define floatDefaultFormat "%f"
  21. #define sizeDefaultFormat "w:%f h:%f"
  22. #define pointDefaultFormat "x:%f y:%f"
  23. #define colorDefaultFormat "r:%f g:%f b:%f a:%f"
  24.  
  25. #define convertToColor NXConvertRGBAToColor
  26. #define convertFromColor NXConvertColorToRGBA
  27.  
  28. int writeIntDefault(const char *name, int value)
  29. {
  30.     char string[BUFSIZ];
  31.     
  32.     (void) sprintf(string, intDefaultFormat, value);
  33.     
  34.     return writeDefault(name, string);
  35. }
  36.  
  37. int writeFloatDefault(const char *name, float value)
  38. {
  39.     char string[BUFSIZ];
  40.     
  41.     (void) sprintf(string, floatDefaultFormat, value);
  42.     
  43.     return writeDefault(name, string);
  44. }
  45.  
  46. int writeSizeDefault(const char *name, NXSize size)
  47. {
  48.     char string[BUFSIZ];
  49.     
  50.     (void) sprintf(string, sizeDefaultFormat, size.width, size.height);
  51.     
  52.     return writeDefault(name, string);
  53. }
  54.  
  55. NXSize getSizeDefault(const char *name)
  56. {
  57.     NXSize size;
  58.     const char *string = getStringDefault(name);
  59.     
  60.     (void) sscanf(string, sizeDefaultFormat, &size.width, &size.height);
  61.  
  62.     return size;
  63. }
  64.  
  65. int writePointDefault(const char *name, NXPoint point)
  66. {
  67.     char string[BUFSIZ];
  68.     
  69.     (void) sprintf(string, pointDefaultFormat, point.x, point.y);
  70.     
  71.     return writeDefault(name, string);
  72. }
  73.  
  74. NXPoint getPointDefault(const char *name)
  75. {
  76.     NXPoint point;
  77.     const char *string = getStringDefault(name);
  78.     
  79.     (void) sscanf(string, pointDefaultFormat, &point.x, &point.y);
  80.  
  81.     return point;
  82. }
  83.  
  84. int writeColorDefault(const char *name, NXColor color)
  85. {
  86.     char string[BUFSIZ];
  87.     float primaries[3], alpha;
  88.     
  89.     convertFromColor(color, &(primaries[0]), &(primaries[1]), &(primaries[2]), &alpha);
  90.     
  91.     (void) sprintf(string, colorDefaultFormat, primaries[0], primaries[1], primaries[2], alpha);
  92.     
  93.     return writeDefault(name, string);
  94. }
  95.  
  96. NXColor getColorDefault(const char *name)
  97. {
  98.     float primaries[3], alpha;
  99.     const char *string = getStringDefault(name);
  100.     
  101.     (void) sscanf(string, colorDefaultFormat, &(primaries[0]), &(primaries[1]), &(primaries[2]), &alpha);
  102.  
  103.     return convertToColor(primaries[0], primaries[1], primaries[2], alpha);
  104. }
  105.  
  106. @implementation DefaultsTable : NXStringTable
  107.  
  108. - initFromFile:(const char *) file
  109. {
  110.     return [[self init] readFromFile:file];
  111. }
  112.  
  113. - registerDefaults:(const char *) owner
  114. {
  115.     if(![self applyToDefaults:owner function:NXRegisterDefaults]) return nil;
  116.  
  117.     return self;
  118. }
  119.  
  120. - writeDefaults:(const char *) owner
  121. {
  122.     if(![self applyToDefaults:owner function:(int (*)(const char *, const NXDefaultsVector)) NXWriteDefaults]) return nil;
  123.  
  124.     return self;
  125. }
  126.  
  127. - updateDefaults
  128. {
  129.      NXUpdateDefaults();
  130.  
  131.     return self;
  132. }
  133.  
  134. - (int) applyToDefaults:(const char *) owner function:(int (*)(const char *, const NXDefaultsVector)) routine
  135. {
  136.     int i, status;
  137.     const void *key, *value;
  138.     struct _NXDefault *vector;
  139.     NXHashState state = [self initState];
  140.  
  141.     if((vector = (struct _NXDefault *) malloc(([self count] + 1) * sizeof(struct _NXDefault))) == NULL) perror("calloc");
  142.  
  143.     for(i = 0; [self nextState:&state key:&key value:&value]; i++) {
  144.         vector[i].name = (char *) key;
  145.         vector[i].value = (char *) value;
  146.         }
  147.  
  148.     vector[i].name = vector[i].value = NULL;
  149.  
  150.     status = (*routine)(owner, vector);
  151.  
  152.     free(vector);
  153.  
  154.     return status;
  155. }
  156.  
  157. @end
  158.